package com.woniu.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.woniu.entity.User;
import com.woniu.mapper.UserMapper;
import com.woniu.service.IUserService;
import com.woniu.util.EmptyUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * <p>
 * 服务实现类
 * </p>
 *
 * @author hyl
 * @since 2022-08-28
 */
@Service
@Transactional
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {

    /*/**
     *@description 根据userid查询user
     *@params [userId]
     *@return_value com.woniu.entity.User
     *@author hyl
     *@date 2022/8/29
     */
    @Autowired
    private UserMapper userMapper;

    @Override
    public User getByUserId(Integer userId) {
        return userMapper.getByUserId(userId);
    }

    /*/**
     *@description 多条件查询user
     *@params [user]
     *@return_value java.util.List<com.woniu.entity.User>
     *@author hyl
     *@date 2022/8/29
     */
    @Override
    public List<User> getByAnyUser(User user) {
        return userMapper.getByAnyUser(getWrapper(user));
    }

    /*/**
     *@description 多条件分页查询user
     *@params [p, pageSize, user]
     *@return_value com.baomidou.mybatisplus.extension.plugins.pagination.Page<com.woniu.entity.User>
     *@author hyl
     *@date 2022/8/29
     */
    @Override
    public Page<User> getByAnyUserWithPage(Integer p, Integer pageSize, User user) {
        QueryWrapper wrapper = getWrapper(user);
        Page<User> page = new Page<>(p, pageSize);
        return userMapper.getByAnyUserWithPage(page, wrapper);
    }
    /*/**
     *@description  QueryWrapper判断
     *@params [user]
     *@return_value com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
     *@author hyl
     *@date 2022/8/30
     */
    private static QueryWrapper getWrapper(User user) {
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        if (EmptyUtil.isEmpty(user)){
            wrapper.eq("1","1");
            return wrapper;
        }
        if (EmptyUtil.isNoEmpty(user.getUserId())) {
            wrapper.eq("user_id", user.getUserId());
        }
        if (EmptyUtil.isNoEmpty(user.getUserMail())) {
            wrapper.eq("user_email", user.getUserMail());
        }
        if (EmptyUtil.isNoEmpty(user.getUserName())) {
            wrapper.eq("user_name", user.getUserName());
        }
        if (EmptyUtil.isNoEmpty(user.getUserStatus())) {
            wrapper.eq("user_status", user.getUserStatus());
        }
        if (EmptyUtil.isNoEmpty(user.getSalary())) {
            wrapper.eq("salary", user.getSalary());
        }
        if (EmptyUtil.isNoEmpty(user.getUserTel())) {
            wrapper.eq("user_tel", user.getUserTel());
        }
        if (EmptyUtil.isNoEmpty(user.getDept()) && EmptyUtil.isNoEmpty(user.getDept().getDeptId())) {
            wrapper.eq("dept_id", user.getDept().getDeptId());
        }
        if (EmptyUtil.isNoEmpty(user.getRole()) && EmptyUtil.isNoEmpty(user.getRole().getRoleId())) {
            wrapper.eq("role_id", user.getRole().getRoleId());
        }
        if (EmptyUtil.isNoEmpty(user.getAccount())) {
            wrapper.eq("account", user.getAccount());
        }
        if (EmptyUtil.isNoEmpty(user.getPassword())) {
            wrapper.eq("password", user.getPassword());
        }
        if (EmptyUtil.isNoEmpty(user.getEntryDate())) {
            wrapper.eq("entry_date", user.getEntryDate());
        }
        if (EmptyUtil.isNoEmpty(user.getLeaveDate())) {
            wrapper.eq("leave_date", user.getLeaveDate());
        }
        if (EmptyUtil.isNoEmpty(user.getGender())) {
            wrapper.eq("gender", user.getGender());
        }
        if (EmptyUtil.isNoEmpty(user.getStartTime())) {
            wrapper.gt("entry_date", user.getStartTime());
        }
        if (EmptyUtil.isNoEmpty(user.getEndTime())) {
            wrapper.lt("entry_date", user.getEndTime());
        }
        if (EmptyUtil.isNoEmpty(user.getMinSalary())) {
            wrapper.gt("salary", user.getMinSalary());
        }
        if (EmptyUtil.isNoEmpty(user.getMaxSalary())) {
            wrapper.eq("salary", user.getMaxSalary());
        }
        if (wrapper.isEmptyOfWhere()) {
            wrapper.eq("1", "1");
        }
        return wrapper;
    }

    /*/**
     *@description 根据项目id查询user
     *@params [proId]
     *@return_value java.util.List<com.woniu.entity.User>
     *@author hyl
     *@date 2022/8/29
     */
    @Override
    public List<User> getUserByProId(Integer proId) {
        return userMapper.getUserByProId(proId);
    }
}
